
// 保存输入的状态
const Input = {}

// 标记人物状态
const State = {
    stand:1, //人物站在平台的状态
    attack:2, // 攻击的状态
}
cc.Class({
    extends: cc.Component,
    properties: {},
    onLoad () {
        // console.log('onLoad',this);
        // 设置最大的移动速度
        this._speed = 200;
        // 设置当前移动速度
        this.sp = cc.v2(0.0);

        // 默认站在平台上
        this.heroState = State.stand
        // 当前是否在攻击状态 0 未攻击  1 攻击1   
        this.combo = 0
        // 默认的动画
        this.anima = 'idle';
        // 拿到当前动画状态
        this.herAni = this.node.getComponent(cc.Animation)
        // 监听动画回调
        this.herAni.on("finished",this.onAnimFinshed,this)

        // 监听键盘按下事件
        cc.systemEvent.on("keydown",this.onKeydown,this)
         // 监听键盘松开事件
        cc.systemEvent.on("keyup",this.onKeyup,this)
    },
    onDestroy(){
        cc.systemEvent.off("keydown",this.onKeydown,this)
        cc.systemEvent.off("keyup",this.onKeyup,this)
        this.herAni.off("finished",this.onAnimFinshed,this)
    },

    // 播放动画
    setAni(anima){
        if(this.anima == anima) return
        // 选择播放那段动画
        this.anima = anima
        this.herAni.play(anima)

    },

    // 监听动画回调
    onAnimFinshed(e,data){
        if(data.name == 'attack' || data.name == 'attack2' || data.name == 'attack3'){
            // this.anima = 'attack2'
            this.heroState = State.stand
            this.combo = (this.combo + 1) % 3
            // console.log("攻击结束",this.combo);
        }
    },

    onKeydown(e){
        // console.log('按下',e);
        Input[e.keyCode] = 1
    },
    onKeyup(e){
        // console.log('松开',e);
        Input[e.keyCode] = 0
    },

    update (dt) {
        // 获取当前动画
        let anima = this.anima;
        // 改变当前的面朝方向
        let scaleX = Math.abs(this.node.scaleX)

        // 拿到一个当前的向前速度
        this.lv = this.node.getComponent(cc.RigidBody).linearVelocity;

        // 判断 如果是现在是攻击状态的时候需要更改攻击的状态
        switch (this.heroState){
            case State.stand:{
                if(Input[cc.macro.KEY.j]){
                    this.heroState = State.attack;
                }
                break
            }
        }

        if(this.heroState == State.attack){
            if(Input[cc.macro.KEY.j]){
                if(this.combo == 0){
                    anima = 'attack'
                }else if(this.combo == 1){
                    anima = 'attack2'
                }else if(this.combo == 2){
                    anima = 'attack3'
                }
            }
        }
        
        // if(this.heroState == State.attack){
        if(this.heroState != State.stand){
            this.sp.x = 0;
        // }
        }else{
            this.combo = 0
            // 判断当前按键
            if(Input[cc.macro.KEY.a] || Input[cc.macro.KEY.left]){
                // console.log("左一");
                // this.sp.y = -5;
                this.sp.x = -1;
                this.node.scaleX = -scaleX
                anima = 'run'
            }else if(Input[cc.macro.KEY.d] || Input[cc.macro.KEY.right]){
                // this.sp.y = 5;
                this.sp.x = 1; 
                this.node.scaleX = scaleX
                anima = 'run'
            }else{
                // this.sp.y = 0
                this.sp.x = 0;
                anima = 'idle'
            }
        }

        // 如果有当前速度的话 那么就可以移动  现在只有左右 所以不用y轴
        if(this.sp.x){
            // this.lv.y = this.sp.y * this._speed
            this.lv.x = this.sp.x * this._speed

        }else{
            // this.lv.y = 0
            this.lv.x = 0
        }
        if(anima){
            this.setAni(anima)
        }

        this.node.getComponent(cc.RigidBody).linearVelocity = this.lv
    },
});
